package com.kylin.shared.enums;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.util.CollectionUtils;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 结算中心订单状态
 * @author Damon S.
 * @version v1.0.1
 * @date 2019年11月25日 14:23
 */
@Getter
@RequiredArgsConstructor
public enum OrderState {
    /**
     * 订单状态：0=>待付，1=>完成(已付款)，2=>取消，3=>待发货，4=>发货中，5=>已发货(已收货)，6 => 退货申请（用户），
     * 7=>退货取消（客服），8=>退货确认（客服），9=>退货中（用户需提交运单号），10=>退货进仓（外仓确认），11=>退款确认
     */
    NA(-1),
    PENDING(0),
    PAID(1),
    CANCELLED(2),
    TOBE_DELIVERED(3),
    DELIVERING(4),
    DELIVERED(5),
    RETURN_REQUEST(6),
    RETURN_CANCELLED(7),
    RETURN_CONFIRMED(8),
    RETURNING(9),
    RETURNED(10),
    REFUNDED(11);

    private final int code;

    /**
     * 从CODE值解析订单状态
     * @param code 编码值
     * @return 返回 订单状态枚举
     */
    public static OrderState parse(int code) {
        List<OrderState> filteredStates = Arrays.stream(OrderState.values())
                        .filter(state -> Objects.equals(state.getCode(), code))
                        .collect(Collectors.toList());
        return CollectionUtils.isEmpty(filteredStates) ? NA : filteredStates.get(0);
    }
}
